package com.gonsin.gview.annotations.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.google.gson.annotations.Expose;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import springfox.documentation.annotations.ApiIgnore;

import java.io.File;
import java.io.InputStream;

@Getter
@Setter
@ApiModel("下载响应")
public class DownloadResponse {

    @ApiModelProperty("实际下载的url")
    private String url;

    @ApiModelProperty(value = "下载之后的文件名", required = true)
    private String filename;


    /**
     * 如果下载的内容是单纯的文本，不需要写文件，直接下载
     */
    @JsonIgnore
    @Expose(serialize = false, deserialize = false)
    @ApiModelProperty(hidden = true)
    private String purityString;


    /**
     * 如果下载的内容是单纯的文件
     */
    @JsonIgnore
    @Expose(serialize = false, deserialize = false)
    @ApiModelProperty(hidden = true)
    private File purityFile;


    /**
     * 如果下载的内容是流，不需要写文件，直接下载
     */
    @JsonIgnore
    @Expose(serialize = false, deserialize = false)
    @ApiModelProperty(hidden = true)
    private InputStream purityInputStream;


    /**
     * 根据url生成下载连接
     */
    public DownloadResponse(String filename, String url) {
        this.url = url;
        this.filename = filename;
    }

    private DownloadResponse(){}


    /**
     * 通过url创建下载响应
     *
     * 前端会直接通过该url下载文件
     */
    public static DownloadResponse createByUrl(String filename, String url){
        DownloadResponse response = new DownloadResponse();
        response.setFilename(filename);
        response.setUrl(url);
        return response;
    }


    /**
     * 通过本地文件  创建下载响应
     *
     * 前端会直接通过gview提供的接口，从后台读取文件流，转化为下载给到前端
     */
    public static DownloadResponse createByFile(String filename, File file){
        DownloadResponse response = new DownloadResponse();
        response.setFilename(filename);
        response.setPurityFile(file);
        return response;
    }


    /**
     * 通过 纯字符串  创建下载响应
     *
     * 前端会直接通过gview提供的接口，从后台获取该字符串，以文件的形式下载到前端
     */
    public static DownloadResponse createByText(String filename, String text){
        DownloadResponse response = new DownloadResponse();
        response.setFilename(filename);
        response.setPurityString(text);
        return response;
    }


    /**
     * 通过 输入流的方式 创建下载响应
     *
     * 前端会直接通过gview提供的接口，从后台获取输入流的方式，以文件的形式下载到前端
     */
    public static DownloadResponse createByInputStream(String filename, InputStream inputStream){
        DownloadResponse response = new DownloadResponse();
        response.setFilename(filename);
        response.setPurityInputStream(inputStream);
        return response;
    }



}
